﻿using System;
using System.Collections.Generic;

namespace Lenic.DI.Lifetimes
{
    /// <summary>
    /// 对象实例生存周期管理接口
    /// </summary>
    public interface ILifetime : INotifiedObject, IDisposable
    {
        /// <summary>
        /// 获取或设置对象生成委托。
        /// </summary>
        Delegate Function { get; set; }

        /// <summary>
        /// 获取 T 类型的实例对象。
        /// </summary>
        /// <typeparam name="T">待获取的目标类型</typeparam>
        /// <param name="name">用于区分的实例名称。</param>
        /// <param name="action">用于获取对象的委托方法。</param>
        /// <returns>
        /// 获取得到的 T 类型的对象实例。
        /// </returns>
        T GetInstance<T>(string name, Func<Delegate, T> @action);

        /// <summary>
        /// 获取与生存周期相关的扩展属性。
        /// </summary>
        IDictionary<string, object> Tag { get; }
    }
}